Application的概念
Application是一组业务逻辑相关的StreamJob的集合。合理地使用Application划分StreamJob可以很好的实现用户之间的资源共享和隔离。
如基于流的SQL引擎:StreamSQL(基础介绍)所介绍的,StreamSQL有三个核心的概念:Stream、StreamJob 和 Application。Stream是数据流,StreamJob是对一个或多个Stream进行计算并将结果写进一张表的任务,Application是一个或多个StreamJob的集合,用于实现资源的共享和隔离。本文将基于StreamSQL的使用基础,针对 StreamSQL的Application的隔离能力展开介绍。
Application的概念
Application是一组业务逻辑相关的StreamJob的集合。合理地使用Application划分StreamJob可以很好的实现用户之间的资源共享和隔离。
资源共享
Application内使用同一个Input Stream的StreamJob将共享一组Receiver,Receiver用于源源不断的从外部数据源获取数据。例如上图,Application 1中的StreamJob 2和StreamJob 3都以Input Stream 2为数据源,它们共享Application 1中为Input Stream 2启动的Receiver。
资源隔离
不同Application中的StreamJob若使用同一个Input Stream,每个Application会为这些Input Stream分别启动各自的Receiver。例如上图,Application 1和Application 2中的StreamJob都访问了Input Stream 2,所以Application 1和Application 2将分别为Input Stream 2启动一组Receiver。
Application相关语法
Application在静态时只是一个逻辑概念,主要用于帮助实现运行时的隔离和权限验证。用户可以对Application进行参数配置,且作用范围仅限于此逻辑单元。用户利用用户名登录Shell(比如Beeline),在自己创建的Application下通过SQL编写业务逻辑,并且可以对Application设置对应的权限(查看/修改/执行),从而通过Application方便地对业务进行查看管理。
关于Application的DDL
创建一个Application
CREATE APPLICATION <app_name> WITH APPPROPERTIES(["key"="value"][,"key"="value"...]); |
创建一个新的Application,可以用上述语法在APPPROPERTIES中指定任何需要对Application设置的参数。
描述一个Application
DESCRIBE [|DESC] APPLICATION <app_name>; |
描述指定Application的信息。
显示当前的Application
SHOW CURRENT APPLICATION; |
显示当前用户所在的Application。
修改一个Application
ALTER APPLICATION <app_name> SET APPPROPERTIES("key"="value"); |
通过SET APPPROPERTIES修改Application配置信息。
显示所有Application
SHOW APPLICATIONS; |
显示所有的Applications。
删除一个Application
DROP APPLICATION <app_name>; |
删除指定的Application。
Application级别管理
用户运行任何StreamJob之前需要进入对应的Application。默认情况下,当前的Application为default。
进入Application
USE APPLICATION <app_name>; |
显示正在运行的Application
LIST APPLICATIONS; |
关于Application隔离的应用实战
用户Emily作为一名新手刚刚开始接触Transwarp StreamSQL,老板希望Emily做一些试验性的任务。由于集
46 32037 46 14987 0 0 1126 0 0:00:28 0:00:13 0:00:15 2687上已有应用投入生产,为了不随意影响当前正在运行的应用,Emily决定利用StreamSQL支持的Application实现资源隔离,保证现有任务不受新建Application的影响。
连接至Inceptor后,Emily通过如下语句查看当前所有正在运行StreamJob的Application:
发现当前一个名为production的Application有StreamJob正在运行。接着,她查询了当前所在的Application:
目前正处于一个名为default的Application里。
为了不影响正在production中运行的为生产所用的StreamJob,Emily向管理员申请创建新的Application。
为了允许Emily新建Application,管理员用hive用户登陆Inceptor,切换到ADMIN角色:
为用户Emily创建CREATE Application的权限:
现在Emily就可以开始创建自己的Application并使用它了:
首先Emily在testapp中新建了一个流和一张表:
然后启动StreamJob:
接着查看该StreamJob是否启动成功:
输出如下,发现该StreamJob确实存在于结果列表中,证明创建成功:
现在Emily再次查看有StreamJob正在运行的Application:
如果切换到default application然后查看正在运行的StreamJob:
Emily会发现,并不能获得production中启动的StreamJob。此时,如果使用production的用户查看production中正在运行的StreamJob,同样也不会看到Emily刚刚在testapp中启动的StreamJob。
最后,完成任务后,Emily停止testapp中所有的StreamJobs:先切换回testapp,然后停止其中的StreamJobs。
结语
StreamSQL支持并引入Application的概念,就是为了在流处理平台上实现面向用户的资源隔离。Application之间彼此独立,使不同Application中的StreamJob即使访问了同一个Input Stream,也对对方一无所知,从而构造出一种独立的环境。Application隔离方便了对于StreamJob的资源管理和分配,同时了加强了对信息的安全保障。各个应用平行运作,互不影响,有效的提升了开发效率。
往期原创文章
大数据开放实验室由星环信息科技(上海)有限公司运营,专门致力于大数据技术的研究和传播。若转载请在文章开头明显注明“文章来源于微信订阅号——大数据开放实验室”,并保留作者和账号介绍。